package common

import (
	"database/sql/driver"
	"fmt"
)

type Role string

const (
	RoleCosoleAdmin Role = "superadmin"
	RoleAdmin       Role = "admin"
	RoleUser        Role = "user"
	RoleGuest       Role = "guest"
)

// 可选：验证角色是否合法
func (r Role) IsValid() bool {
	switch r {
	case RoleAdmin, RoleUser, RoleGuest, RoleCosoleAdmin:
		return true
	default:
		return false
	}
}

// 实现数据库的 Scanner 接口
func (r *Role) Scan(value interface{}) error {
	*r = Role(value.([]byte))
	if !r.IsValid() {
		return fmt.Errorf("invalid role value: %s", *r)
	}
	return nil
}

// 实现数据库的 Valuer 接口
func (r Role) Value() (driver.Value, error) {
	if !r.IsValid() {
		return nil, fmt.Errorf("invalid role value: %s", r)
	}
	return string(r), nil
}

//
//func (r *Role) Scan(v interface{}) error {
//	bytes, ok := v.([]byte)
//	if !ok {
//		return errors.New(fmt.Sprint("Failed to unmarshal JSONB value:", v))
//	}
//	role := string(bytes)
//	if role == "0" {
//		*r = "超级管理员"
//	} else if role == "1" {
//		*r = "管理员"
//	} else if role == "2" {
//		*r = "成员"
//	} else if role == "3" {
//		*r = "游客"
//	}
//	return nil
//}
//
//func (r Role) Value() (driver.Value, error) {
//	if r == "超级管理员" {
//		return "0", nil
//	} else if r == "管理员" {
//		return "1", nil
//	} else if r == "成员" {
//		return "2", nil
//	} else if r == "游客" {
//		return "3", nil
//	} else {
//
//	}
//	return "3", nil
//}
